package cn.zdm.demo2.common.result;

/**
 * copyright (C), 2021, 武大吉奥科技有限公司
 *
 * @Program demo2
 * @Description 响应结果
 * @Author ZhaoDeman
 * @Create 2021/1/19 21:58
 * @Version 1.0.0
 * <author>                <time>                  <version>                   <description>
 * ZhaoDeman        2021/1/19 21:58                 1.0
 */
public class ResultResponse {
    private static final String SUCCESS_MSG = "请求成功";
    private static final String FAIL_MSG = "请求失败";

    /**
     * 数据条数
     */
    private Integer count;

    public ResultResponse() {
    }

    /**
     * 返回成功
     *
     * @param <T> 泛型参数
     * @return ResultObject<T>
     */
    public static <T> ResultObject<T> success() {
        return (new <T>ResultObject()).setCode(ResultCode.SUCCESS).setMsg(SUCCESS_MSG);
    }

    /**
     * 返回成功携带的数据
     *
     * @param data 返回的数据
     * @param <T>  泛型参数
     * @return ResultObject<T>
     */
    public static <T> ResultObject<T> success(T data) {
        return (new <T>ResultObject()).setCode(ResultCode.SUCCESS).setMsg(SUCCESS_MSG).setData(data);
    }

    /**
     * 返回成功携带的数据
     *
     * @param data 返回的数据
     * @param <T>  泛型参数
     * @return ResultObject<T>
     */
    public static <T> ResultObject<T> success(Integer count, T data) {
        return (new <T>ResultObject()).setCode(ResultCode.SUCCESS).setCount(count).setMsg(SUCCESS_MSG).setData(data);
    }

    /**
     * @param msg
     * @param <T>
     * @return
     */
    public static <T> ResultObject<T> success(String msg) {
        return (new <T>ResultObject()).setCode(ResultCode.SUCCESS).setMsg(msg);
    }

    /**
     * 请求成功返回的数据
     *
     * @param msg  返回的消息
     * @param data 返回携带的数据
     * @param <T>  泛型参数
     * @return ResultObject<T>
     */
    public static <T> ResultObject<T> success(String msg, T data) {
        return (new <T>ResultObject()).setCode(ResultCode.SUCCESS).setMsg(msg).setData(data);
    }

    /**
     * 请求成功返回的数据
     *
     * @param msg  返回的消息
     * @param data 返回携带的数据
     * @param <T>  泛型参数
     * @return ResultObject<T>
     */
    public static <T> ResultObject<T> success(String msg, Integer count, T data) {
        return (new <T>ResultObject()).setCode(ResultCode.SUCCESS)
                .setCount(count)
                .setMsg(msg).setData(data);
    }

    /**
     * 请求失败的返回数据
     *
     * @param <T>
     * @return ResultObject<T>
     */
    public static <T> ResultObject<T> error() {
        return (new <T>ResultObject()).setCode(ResultCode.FAIL).setMsg(FAIL_MSG);
    }

    /**
     * 请求失败返回的数据
     *
     * @param data 返回给前台的数据
     * @param <T>
     * @return ResultObject<T>
     */
    public static <T> ResultObject<T> error(T data) {
        return (new <T>ResultObject()).setCode(ResultCode.FAIL).setMsg(FAIL_MSG).setData(data);
    }

    /**
     * 请求失败返回的数据
     *
     * @param msg  错误信息
     * @param data 返回的数据
     * @param <T>  泛型参数
     * @return ResultObject<T>
     */
    public static <T> ResultObject<T> error(String msg, T data) {
        return new <T>ResultObject().setCode(ResultCode.FAIL).setMsg(msg).setData(data);
    }

    /**
     * 请求失败返回的参数
     *
     * @param code 错误状态码
     * @param msg  错误信息
     * @param data 携带数据
     * @param <T>  泛型参数
     * @return ResultObject<T>
     */
    public static <T> ResultObject<T> error(int code, String msg, T data) {
        return (new <T>ResultObject()).setCode(code).setMsg(msg).setData(data);
    }

    /**
     * 请求失败返回数据
     *
     * @param code 错误状态码
     * @param msg  错误信息
     * @param <T>
     * @return ResultObject<T>
     */
    public static <T> ResultObject<T> error(int code, String msg) {
        return (new <T>ResultObject()).setCode(code).setMsg(msg);
    }


}
